/**
 * Software License, Version 1.0
 * 
 * Copyright 2003 The Trustees of Indiana University.  All rights reserved.
 * 
 *
 *Redistribution and use in source and binary forms, with or without 
 *modification, are permitted provided that the following conditions are met:
 *
 *1) All redistributions of source code must retain the above copyright notice,
 * the list of authors in the original source code, this list of conditions and
 * the disclaimer listed in this license;
 *2) All redistributions in binary form must reproduce the above copyright 
 * notice, this list of conditions and the disclaimer listed in this license in
 * the documentation and/or other materials provided with the distribution;
 *3) Any documentation included with all redistributions must include the 
 * following acknowledgement:
 *
 *"This product includes software developed by the Community Grids Lab. For 
 * further information contact the Community Grids Lab at 
 * http://communitygrids.iu.edu/."
 *
 * Alternatively, this acknowledgement may appear in the software itself, and 
 * wherever such third-party acknowledgments normally appear.
 * 
 *4) The name Indiana University or Community Grids Lab or NaradaBrokering, 
 * shall not be used to endorse or promote products derived from this software 
 * without prior written permission from Indiana University.  For written 
 * permission, please contact the Advanced Research and Technology Institute 
 * ("ARTI") at 351 West 10th Street, Indianapolis, Indiana 46202.
 *5) Products derived from this software may not be called NaradaBrokering, 
 * nor may Indiana University or Community Grids Lab or NaradaBrokering appear
 * in their name, without prior written permission of ARTI.
 * 
 *
 * Indiana University provides no reassurances that the source code provided 
 * does not infringe the patent or any other intellectual property rights of 
 * any other entity.  Indiana University disclaims any liability to any 
 * recipient for claims brought by any other entity based on infringement of 
 * intellectual property rights or otherwise.  
 *
 *LICENSEE UNDERSTANDS THAT SOFTWARE IS PROVIDED "AS IS" FOR WHICH NO 
 *WARRANTIES AS TO CAPABILITIES OR ACCURACY ARE MADE. INDIANA UNIVERSITY GIVES
 *NO WARRANTIES AND MAKES NO REPRESENTATION THAT SOFTWARE IS FREE OF 
 *INFRINGEMENT OF THIRD PARTY PATENT, COPYRIGHT, OR OTHER PROPRIETARY RIGHTS. 
 *INDIANA UNIVERSITY MAKES NO WARRANTIES THAT SOFTWARE IS FREE FROM "BUGS", 
 *"VIRUSES", "TROJAN HORSES", "TRAP DOORS", "WORMS", OR OTHER HARMFUL CODE.  
 *LICENSEE ASSUMES THE ENTIRE RISK AS TO THE PERFORMANCE OF SOFTWARE AND/OR 
 *ASSOCIATED MATERIALS, AND TO THE PERFORMANCE AND VALIDITY OF INFORMATION 
 *GENERATED USING SOFTWARE.
 */
/**
 * Software License, Version 1.0
 *
 * Copyright 2003 The Trustees of Indiana University.  All rights reserved.
 *
 *
 *Redistribution and use in source and binary forms, with or without
 *modification, are permitted provided that the following conditions are met:
 *
 *1) All redistributions of source code must retain the above copyright notice,
 * the list of authors in the original source code, this list of conditions and
 * the disclaimer listed in this license;
 *2) All redistributions in binary form must reproduce the above copyright
 * notice, this list of conditions and the disclaimer listed in this license in
 * the documentation and/or other materials provided with the distribution;
 *3) Any documentation included with all redistributions must include the
 * following acknowledgement:
 *
 *"This product includes software developed by the Community Grids Lab. For
 * further information contact the Community Grids Lab at
 * http://communitygrids.iu.edu/."
 *
 * Alternatively, this acknowledgement may appear in the software itself, and
 * wherever such third-party acknowledgments normally appear.
 *
 *4) The name Indiana University or Community Grids Lab or NaradaBrokering,
 * shall not be used to endorse or promote products derived from this software
 * without prior written permission from Indiana University.  For written
 * permission, please contact the Advanced Research and Technology Institute
 * ("ARTI") at 351 West 10th Street, Indianapolis, Indiana 46202.
 *5) Products derived from this software may not be called NaradaBrokering,
 * nor may Indiana University or Community Grids Lab or NaradaBrokering appear
 * in their name, without prior written permission of ARTI.
 *
 *
 * Indiana University provides no reassurances that the source code provided
 * does not infringe the patent or any other intellectual property rights of
 * any other entity.  Indiana University disclaims any liability to any
 * recipient for claims brought by any other entity based on infringement of
 * intellectual property rights or otherwise.
 *
 *LICENSEE UNDERSTANDS THAT SOFTWARE IS PROVIDED "AS IS" FOR WHICH NO
 *WARRANTIES AS TO CAPABILITIES OR ACCURACY ARE MADE. INDIANA UNIVERSITY GIVES
 *NO WARRANTIES AND MAKES NO REPRESENTATION THAT SOFTWARE IS FREE OF
 *INFRINGEMENT OF THIRD PARTY PATENT, COPYRIGHT, OR OTHER PROPRIETARY RIGHTS.
 *INDIANA UNIVERSITY MAKES NO WARRANTIES THAT SOFTWARE IS FREE FROM "BUGS",
 *"VIRUSES", "TROJAN HORSES", "TRAP DOORS", "WORMS", OR OTHER HARMFUL CODE.
 *LICENSEE ASSUMES THE ENTIRE RISK AS TO THE PERFORMANCE OF SOFTWARE AND/OR
 *ASSOCIATED MATERIALS, AND TO THE PERFORMANCE AND VALIDITY OF INFORMATION
 *GENERATED USING SOFTWARE.
 */
package cgl.narada.wsinfra.deployment.axis.wse;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Calendar;
import java.util.StringTokenizer;

import org.apache.log4j.Logger;

import cgl.narada.wsinfra.exception.DeploymentException;

/**
 * @author Damodar Yemme
 * Created on Mar 10, 2005
 * This is a Sink End point to issue request to subscribe, status, renew,
 * unsubscribe from Sink WebService
 */
public class WseSinkClient {
  static Logger logger = Logger.getLogger(WseSinkClient.class);

  private String moduleName = "WseSinkClient";
  /**
   * Default constructor for WseSinkclient class
   * @throws DeploymentException
   */
  public WseSinkClient() throws DeploymentException {

  }

  /**
   * main() for SinkCleint class..
   * @param String[] arg
   */
  public static void main(String[] args) {

    BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
    StringTokenizer tok;
    String cmd;
    String sourceAddress = WseServicesFactory.getSourceAddress();
    String SMAddress = WseServicesFactory
        .getSubscriptionManagerAddress();
    try {
      String sinkAddress = WseServicesFactory.getSinkAddress();
      WseSinkClient client = new WseSinkClient();
      WseSinkClientService wseSinkClientService
          = new WseSinkClientService(sinkAddress, SMAddress);
      System.out.println("Wse Sink Web Service on AXIS is running at "
                         + sinkAddress);
      System.out.println("Type 'h' for commands help\n");
      while (true) {
        cmd = r.readLine();

        if (cmd == null) {
          System.out.println("Terminating program ....");
          break;
        }

        if (cmd.startsWith("h")) {
          System.out
              .println("Subscribe   \t\t-> sub <subType> [t][r][x][q]");
          System.out
              .println("GetStatus   \t\t-> status [subscriptionId]");
          System.out
              .println("Renew       \t\t-> renew [subscriptionId]");
          System.out
              .println("UnSubscribe \t\t-> unsub [subscriptionId]");
          System.out.println("Command-list\t\t-> h]");
        }
        if (cmd.startsWith("sub")) {
          tok = new StringTokenizer(cmd, " ");
          tok.nextToken(); /* skipping the token "status" */
          String subscriptionType = "topic";
          String widget = tok.nextToken();
          if (widget.startsWith("t")) {
            subscriptionType = "topic";
          }
          if (widget.startsWith("x")) {
            subscriptionType = "xpath";
          }
          if (widget.startsWith("r")) {
            subscriptionType = "regex";
          }
          if (widget.startsWith("q")) {
            subscriptionType = "xquery";
          }

          wseSinkClientService.createSubRequest
              (sourceAddress, subscriptionType);
        }

        if (cmd.startsWith("status")) {
          tok = new StringTokenizer(cmd, " ");
          tok.nextToken(); /* skipping the token "status" */
          String subscriptionIdentifier = tok.nextToken();
          wseSinkClientService.issueGetStatusRequest
              (subscriptionIdentifier);
        }

        if (cmd.startsWith("renew")) {
          tok = new StringTokenizer(cmd, " ");
          tok.nextToken(); /* skipping the token "status" */
          String subscriptionIdentifier = tok.nextToken();
          Calendar expiresAt = Calendar.getInstance();
          expiresAt.add(Calendar.MONTH, 2);
          wseSinkClientService.issueRenewRequest
              (subscriptionIdentifier, expiresAt);
        }

        if (cmd.startsWith("unsub")) {
          tok = new StringTokenizer(cmd, " ");
          tok.nextToken(); /* skipping the token "status" */
          String subscriptionIdentifier = tok.nextToken();
          wseSinkClientService.issueUnsubscribeRequest
              (subscriptionIdentifier);
        }

      }
      /* end while(true) */

    }
    catch (Exception ioe) {
      ioe.printStackTrace();
    }
    /* end try-catch */
  }
  /*end main() */
}